ML $}  X c0C)HCCH Mhhݩh `eCDiCD`  RyHP   * 1H0芢@) Y0.Ș` i #(PMR\ \b Pgi 0  % @ / ՠ`d   0DDԝLX45.BKEYBDDISBRKENBRKABYTDLISTROWCRTXTROBOTSC}@ d11;Ag,;@,;@,;@5,n--@")Ay%}- x+-@@"'67,.>:,+ +-@@"'67,.>:,+ +-@Ag"'67},.>:,+  * Legal control characters134,135,180,183* Illegal keycodes$$44,108,28,92,39,103,119,60,124}* DISBRK$ DATA33104,120,165,16,41,127,133,16,141,14,210,88,96* ENBRK$ DATA22104,120,165,16,9,128,133,16,141 },14,210,88,96* KEYBD$ DATAZZ104,104,141,242,6,104,141,241,6,56,229,140,141,239,6,173,242,6,229,141,141,240,6,162 }VV3,181,116,72,202,16,250,165,83,72,201,39,240,2,230,83,165,82,72,173,240,2,72,165ZZ85,133,82,165,83,24,229,82,133,118,1 }65,95,133,117,165,94,133,116,169,0,141,240,2,141XX72,3,141,73,3,169,11,141,66,3,208,109,201,156,240,31,201,125,240,27,201 },255,240,42YY201,31,240,48,201,155,240,59,162,0,32,86,228,165,83,197,85,208,78,169,30,16,241,164"\\118,169,0,145,116,1 }36,16,251,133,93,165,83,133,85,169,31,16,222,164,118,177,116,208,49,ZZ169,255,48,212,162,0,32,86,228,165,85,197,83,208,34,}169,31,16,241,164,118,177,116,726UU42,42,42,42,41,3,170,104,41,159,29,250,254,41,127,153,128,5,136,16,232,48,4,176@]]14}7,208,98,173,241,6,133,116,173,242,6,133,117,164,118,185,128,5,145,116,136,16,248,164JXX118,185,128,5,201,32,208,3,136,16,}246,200,152,72,162,0,160,0,177,134,16,23,200,200TZZ177,134,205,239,6,208,14,200,177,134,205,240,6,208,6,200,104,145,134,16},9,232,138,10^[[10,10,168,208,221,104,104,141,240,2,104,133,82,104,133,83,162,0,104,149,116,232,224,4h``208,248,96,176,}154,173,252,2,201,255,240,249,162,255,142,252,2,160,127,132,119,164,119,140rXX31,208,162,8,202,16,253,198,119,16,242,201,1}28,144,12,162,3,221,243,6,240,5,202,16|\\248,48,210,162,8,221,247,6,240,203,202,16,248,170,189,254,254,201,97,144,7,201,12}3,1763,56,233,32,56,176,180* START OF DEMO PROGRAM[ +'0@@A0@}@@[0@@@%%6-F:A`,%AV$F:Aa,Find the Display List%@A0}IISet Display List Interrupt bit on mode line halfway down the screen--@")A6%- }Poke in DLI routine--72,169,244,141,10,212,141,24,208,104,64##Assembly Language equivalent:PHA ; SaveLDA} #$F4 ; Brown STA WSYNC ; Wait for synch& STA COLPF2 ; Then store it0PLA ; Restore:RTI ; ReturnD'A}'A@N33Display List Interrupt routine starts at $600XBBAbEnable DLIl }TEST INPUT? v6-?:C:,,11Disable BREAK key before first handler call6-?:C:, A @H   YOU TYPED :R6-?:C:,,\''Re-enable BREAK key b }efore endingf-@p*68%@,-F:%,&%F:%,* zKKCopy split screen values to corresponding !}full screen value locations@$DDThis fools the Operating System into thinking this is a normal22Graphics "}0 display vice split screen display$-@##Restore things back to normal&%8%@, #}&@$ D2:LIST3.BAS-@##Restore things back to normal&%8%@, -N@  )?HI Y0`HIJH) * J j * hJJJ )HJ h i     %} YS S0 i`΢ϣ߳H J3xj2h&} 1 |9 ӭ45(420 * (0241өX.`  R *i)Lvw  ~*P'}E 5 LN(G E  r s k rsrL ( E LO(0d( L iE0O +)$IC  H S8 (}q p h   j 8no CDLQ CFl M  LO Ri)Llk2'")*F)}$F$F$F$F$ 5 )ШF/Șl]kpqС,LQ/A! Ti)Zlk@ ܬ/i)(")")k*}$F$F$F 5$/L /lF@jj(LNkle$$%8(k()` R 8 ELO Ri)^>jf | NrC s +} ) vw5g   enfo Glvw LQ@iLm>j FL ~Jjjjii p qEh,}jlrs`LQ:$ȱ$@+[_#{ 8  Խut! ai 8   E I   ] C-} H h    ˰ 8  N   Lm E  ,  [ `LQ ,/ 8 ~/  Ơ? ѩ.}/  [ /Lj0?MoLn FjMqLp NklLOLQnLoMlNLO R"(+/}ըHH`Q R!!  % !   / .   FȑF! /GF \H"+0+* 0}! F tLQnm: J~nTF1F  *n+)5! n (, n)1JJJn(n*o1} I ,0  ci a oF? @ , 8,0 ʩ0H Eh   i2}  D ]DmmFLQvtu`*&!*@h ] 0 ^0` c 0l$$%3}()()%*&J%H,@hH hH@,h $% 8i8$(%)0hhH ]h`() c 0H c 0 h4}`hhh&JJ ](ll  LQ0  /qnoHH 9 9 H H  I9  9 5} Nd EH  Q8 o n  FnoL HII/ Ih8`h`Lnon`no`u F 6}E VEhLO/luF l0BF/lɜɛ׽hE N  b VFL FREE SECTORS C7} H) *Fh ):FȽ F FC IH' 0 d  i:Fȩ/F.l`CD/08HDIC8}IHȰ/F`ȱ$>.+.i ȱ$:刄H !A \ Hȱ$*?ȝ 2. ? [_{ ,09}-:) 0$:>WI  IТ,LQH  0hLd ~ t u`C ?( 0(C.` E :} R =! .ti S0N EE D XC )0')AY  )ע ? 0E088FG \o;}n  (HhLcL3 iJ i Lqp 0=rspnqopqlk`jZj0  j FL`H<}FhȑFȽlFi0 h FFLFpvqwgneofLF pq7  G0i 0 FJJh1FqȱFpȱFk`B!=}08`hEE D 8. =D}tui( TʩL`b!)    cȌaȌd b`aab>}H8 hdaHcd8 cH hHH  \h hc` =Hh I8ih( t  ( t(!` L\?}CJfCJfCJfCDfC` a  HII  INdh  `h  `n)8jHniPoijIjFIjFIjh` a@} I 38  8H0 I  ' H LQ8j Y  8j NdY  &I &I &IHeH.pA}Iiq  `!.莿 2Jjj }.m Ȉ!m FG` ɩLQ z B} e Hi04 \ Ȍ  8 i h !`I0 `C Y8.`DOS SYSC} I  ` ~ݩ.C/`ba.m۩mѤC9 `C L] H  ,- '0 l D}, BLVDE`D1:AUTORUN.SYS8hhJ ȱHȱIȱBȱDȱEeeHHLV)  E}1*  ,,p-  0 I &  '0   Lw)l, 0  I&LD1:MEM.SAVF}E:D1:DUP.SYSG'੓!U/HI;  >iQg{rGub0e'HًPv“㚙F'!OG} D  C D     )16CS S)  C)D1 p p H}0 C9DI pCDL~CiCDiD` DD˙` d J)L !I}D L(( LL()  L| L( S LH 0p n  J} CY?  q  L L  ` )K} `A! d߰")-݆ "  $G@LLL&0") $G%L}H0 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0M})8` d)L ݆ & LGȘ ݆LL d  ! LL d)N>Q  HH)N}  hyhyB q L> Lm JJ  Ln*` dB%'O}8  H H` 1 { LL   !L     Hh SY?  q  1LP}  !? S   q 1 L   Ll  Lg E`L   !L)  q 1LQ}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@R}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  qS} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF T} G) *Gȩ GȽG GȌd q q G`  8   0G  `DU}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`YV}`piH n0)բY? 08`0 W}  0$L GGȽG L `8L`LX}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`Y}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTEZ} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR[}1LJ舩9GIH`LJJ`HGHh l`\} S gL   8 rii `дCDCG W  ]}C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}}^}& |||||DOS DOSDOS SYS }_}}} }`}CDOS SYSa} 0`BDELV !B b}`LVUQ   ]   TU J ]L!T  #      TU c} L ? .  t`GBJ V~DEHI B V0dVd}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEhe}DEL8HI   0 HI,0 0  9 .G VLOf},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHIg} V0 0`B;DELV䌚 !B y`@ʆ v s? F0Ξ05: [ BDEHIh} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO i}STILL RUN DOS B;DE J V (` 9 V⪍ ઍ  -j}LLu DEHILV 9 .l 9 .l  `` s$B VBHk}I|DE V BLV nB,DE J V* \*` B V BLVDEHI BLVLl}1 3u H232435; 1 ;  hh@2 e1i1LHҍ 00) 08 109hh@ Ҡ2em}1i1232435ޥ<<8}D~DLISBITBITBITd##*****************************n##* o}VERTICAL SCROLLING DEMO *x##* LISTING #1 *##* BY KYLE S. PEACOCK *##* ANALOG COMPUTING #p}15 *##***************************** +-@@))(!THIS IS A TEST OF VERTICAL SCROLLq} --- FIND THE DISPLAY LIST%%6-F:Aa,$AV%F:A`,6-F:%@,6-F:%@r},6-F:%@,"""--- NOW ADD 32 (HEX: $20) TO,##--- DISPLAY LIST INSTRUCTIONS6@%@%@2s}J%@%@2T%@%@2^h--- VERTICAL SCROLLr|-@BBwt}-@P   A!!--- TO REVERSE DIRECTION OF##--- SCROLLING CHANGE LINE 290u}""--- TO: FOR X=7 TO 0 STEP -1D2:SCROLL1.BAS!!--- TO REVERSE DIRECTION OF##--- SCROLLING CHANGE LINE 2907!"jA W MESSWHERPLUDLISADHOLSHIFd## w}*****************************n##* VERTICAL SCROLL DEMO *x##* LISTING #2 *##* BY KYLE S. PEA x}COCK *##* ANALOG COMPUTING #15 *##*****************************- CLEAR OUT MESSAGE SPACE y}&;@%,&(}INITIALIZING...I-AU3@$AV%7 IA@d- REA z}D WHERE IN MEMORY - MESSAGE GOES, ADD ON FOR- COLOR, & MESSAGE,THEN- INSTALL INTO MEMORY-@ {}@ ""-@B:,&@,55%&@@:7%@<%@,,&@2%6   @J- |} NOW READ & INSTALLT- CUSTOMIZED DISPLAY LIST^h Ar"|!!@$AV%A%6-%@ }} Ap- NOW TELL ANTIC WHERE TO!!- FIND OUR NEW DISPLAY LIST'A`A'Aa@ ~} - CHANGE VALUE OF 'VSCROL'#-@#BBw""- LOOP VALUE OF 'Y' DICTATES }- SPEED OF VERTICAL SCROLL-@P  &- NOW SHIFT LMS OPERANDS0:""- NOTE HOW ON }LY THE LOW BYTED""- OPERANDS WERE CHANGED. INN - THIS CASE, WEX - DON'T NEED TO CHANGE THEb!!- HIGH } BYTE OPERANDS (SINCEl""- ALL THE MESSAGES RESIDE ONv- PAGE SIX...)- ϡŠΧԠԠĠƛ- Ԡ }٠ȡBBw**6-F:@$AV%A%@,-@@)@DD }@$AV%A%F:@$AV%A%%@, ''@$AV%A%@2 A` }- MESSAGES  1536,64" A.N.A.L.O.G. "  1556,64*" MAGAZINE "41576,192> }"WE ARE GOING MONTHLY"H1596,192R" THIS ISSUE "\ 1616,0f" SEE YOU IN 30 DAYS "p 1636,0z" } WHEN WE "1656,128" TAKE THE PLUNGE! " 1676,64" ISSUE #15 "- DISPLAY L }IST112,112,112,11270,0,6,112,11270,20,6,112,112,112,112""- VERTICAL SCROLL BIT IS NOW }- SET. CHANGING OF ̛""- WILL NOW SMOOTH SCROLL THE - FOLLOWING LINES OF TEXT.$102,40,6.102,60,6 }8102,80,6B102,100,6L102,120,6V`!!- VERTICAL SCROLL BIT IS NOj!!- LONGER SET. THE NEXT LINEt!!- D }ISPLAYED WILL ACT AS OUR~!!- ONE LINE SCROLL 'BUFFER.'70,160,6!!112,112,112,112,112,112,11270,140,6 }65,185,6D2:SCROLL2.BASLINE SCROLL 'BUFFER.'70,160,6!!112,112,112,112,112,112,11270,140,6 $+,(DATHEXLINDATLIDDBYTPASCHKSUTOTA@} $$*** BRICKLAYER'S NIGHTMARE *** 990,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,10,11,12,13,14,15r};@,9@",/-@"3"<68,-@ L6-A V#A` @`r( CHECKING DATA86-%@}(LINE:!"8B:,@AF%6-F:A,%F:A,$AV+C(LINE  MISSING!Fq-@}@@56-@:7<,,&@H[6-@:7%@<%@,,&@Hq6-8,$@%8,#."@*@} $". @%(% 6-%!A %6-&A-  ""@%2 A< F:A,@A}dJ( WRITING FILE 6-@,6-A 6#A@ @`J @%n(BAD DATA: LINE dd3F3F3F3F3F3F3F3}F3F3F3F3F3F3F3F3F3F3F3F3F7070707047802C44002A040404040404040404040404040404,121dd47802C46473341942CA9008D1DD0A9228D2F02A9}208D3002A9BC8D3102A9E08DF40220C12D20422D20A0322008,169dd32208B2E20422D20F03120B731D03520BB2EADE933D0034CD52CCEFE33D01AADF}C338DFE33AD8402D006ADFD33,356dd8DFE33204D30205C30206B3020AA31ADEA33D0C94CE42C206132CEEB3310B8A200BD3D33C9FFF00909C09D4A33},306ddE84C282DAD8402D0FB854D4CCF2CA9008580A9238581A9008584A9058585A200206931A204A9009D07D0CAD0FA,487ddA9868DC002A9488}DC1028DC2028DC302A9508DF4338D00D0A9788DF6338D01D0A98C8DF7338D02D0A9A08DF833,356$dd8D03D0A9AF8DF5338DF9338DFA338DFB33A9018D}F33320F22FA208BDC4339DAE259DAE269DAE27CAD0F1A9208D,447.dd07D48D1ED060A9008582ADF4028583A9008580A9288581A9008584A9028585205}731A218BD64339DE729CAD0F7,8088ddA9288DF40220752EA9948D3002A92C8D3102A9008DC802A9288DC402A90A8DC502A9D88DC602A9388DC702A93E},615Bdd8D2F02A9038D1DD0A214A9009D4633CAD0FAAD5B33A2069D5333CAD0FAAD5B3309408D4833A9038DEB33A93F8D,702LddEE338D002AA210A}9008580A92A8581A92720622ECAF008A90120622E4C512E601865808580A58169008581ADEE,320Vdd33A000918060A9008580A92A8581A9808584A902}8585A20020693160AD4833290FAAA900CAF0061869044C932E,787`ddAABDCD338DFC33BDCE338DFD33BDCF338DEC33BDD0338DED33A9FA8DE93360AD7}802C90BD03120D32ECEF333D0,190jdd05A9058DF33320F22F60CEF433A933CDF433F012ACF433AEF53320D92FD007ADF4338D00D060EEF43360C907F0},138tdd0BC90EF034C90DF0664C842F200B2F20C1324CC52EEEF433A9C6CDF433F016AEF533ADF433186907A820D92FD0,559~dd07ADF4338D00D06}0CEF43360CEF533A938CDF533F00BACF433AEF53320B12FF003EEF533EEF333A90ACDF333D0,943dd05A9068DF333AEF533A9009D08249DFF2320F22F}60EEF533A9B0CDF533F00FACF433ADF533186907AA20B12FF0,635ddC9CEF5334C472FC90AF00DC906F010C909F013C905F0166020D32E202F2F60200}B2F202F2F6020D32E20652F60,880dd200B2F20652F608CEE338EEF33201230D01CAEEF33ADEE33186904A8201230D00DAEEF33ADEE33186906A82012},266dd30608CEE338EEF33201230D00DACEE33ADEF33186907AA20123060AEF333A9F8186908CAD0FAA8A9088584AEF5,725dd33B97D339D0024E}8C8C684D0F4608A38E9384A4A4AAA9838E9304A4AA8A9008580A92A8581CA301018A5806928,951dd8580A581690085814C2930981865808580A90065}818581A000B18060A9008DFF33201231F0016020773060A901,443dd8DFF33207730F0016020123160A9028DFF3320123120773060A9008580A925858}1ACFF33F006E681884C8230AE,178ddFF33BDF933CDF533D00160B041A58048A58148BDF633A8BDF933186908AA20B12FF0056868A90060AEFF336885},892dd81688580BCF9339180FEF933C8A200A9088584BDC5339180E8C8C684D0F5A90160AEFF33A58048A58148BDF633,393ccA8BDF933AACA20B}12FF0056868A90060AEFF33688581688580DEF933BDF93348186908A8A900918068A84CC530,30ddAEFF33BDF633CDF433D00160B017BDF633186908A}8204731F00160FEF633BDF6339D01D060BCF63388204731F0,792dd0160DEF6334C30318CF033BDF933AA20D92F08AEFF332860A000B1829180207731}208531209331D0F1608AA000,816dd9180208531209331D0F36018A58269018582A583690085836018A58069018580A581690085816038A584E90185,}688 dd84D005A585D00360A585E9008585A90160AEEC33ACED3388D0FDCAD0FA60AD0CD0290E60AD55338DEE33A205FE,679dd5433BD5433C91AD0}08A9109D5433CA10EE88D0E9ADEE33CD5533F00DADEB33C904F006EEEB3320F03160A004A9,331dd00994F3388D0FAACEB33F008A9BD994F3388D0FA6}0AD4833290FC907F003EE4833ADC50248A9058DEE33A90C8D,779(ddC502A9808D00D2A9A68D01D2A000A200205832A9368DC502A9C08D00D2A9A68D01}D2A000A200205832CEEE33D0,9622ddCF688DC502A9008D01D2608AAACAD0FD88D0F960A9098DEE338D00D2A9A08DF2338D01D2A90548A2FFA0FF8EC0,}376<dd0288D0FDADF23338E9038DF2338D01D2CAD0E9EEEE33ADEE338D00D26838E901D0D78D01D26020752E203F2EA9,272Fdd3E8DEE338D5B2AA2}09A95B8580A92A8581A92820622ECAD0F860A9008DEA33AD8402D047A900854DADF4332903,414PddD03CADF43338E908A88DF133AEF533201230C93EF}011ADF533186908AAACF133201230C93ED017A000A9009180,570ZddA93EA0019180A02D20BD31CEE93320133360A9708DF233A9088D00D2ADF2338D01}D2A005A240CAD0FD88D0F8CE,311dccF233ADF233C958D0E6A9018DEA336027212D25002F362532FF0000000000000000000000000000000000000000,}86ndd101112131415161718198090783C1A384848AA8282AAAA8282AAFF999999999999FF1010387CBA488482101038,417xdd3878AC48441010383}8382828101010387CBA381028101038387C3848488090783C1A3848480010FC3A18242400,279bb0010FC3A1824240002123C78B038242266951C2236}3E143608080C0003030C8003020B0002020B0002010B5002,7dd010B8002010A000000000000000000000000000000000000000000000000000000000}000000000000000000000,160D2:BRICMAIN.BAS7dd010B8002010A00000000000000000000000000000000000000000000000000000000012 REM *** CASSETTE VERSION ***65 IF PASS=2 THEN FOR X=1 TO 73:PUT #1,0:NEXT X:CLOSE #1:END 70 ? "READY CASSETTE AND PRESS R}ETURN";:OPEN #1,8,128,"C:":RESTORE 200:FOR X=1 TO 40:READ N:PUT #1,N:NEXT X200 DATA 0,16,88,44,127,44,169,0,141,47,2,169,60,}141,2,211,169,0,141,231,2,133,14,169,56,141,232,2210 DATA 133,15,169,207,133,10,169,44,133,11,24,964,169,0,141,47,2,169,60,e2 REM *** DISK VERSION ***65 IF PASS=2 THEN PUT #1,224:PUT #1,2:PUT #1,225:PUT #1,2:PUT #1,207:PUT #1,44:CLOSE #1:END 70 ? }"INSERT DISK WITH DOS, PRESS RETURN";:DIM IN$(1):INPUT IN$:OPEN #1,8,0,"D:AUTORUN.SYS"90 PUT #1,255:PUT #1,255:PUT #1,128:PU}T #1,44:PUT #1,14:PUT #1,52 RETURN";:DIM IN$(1):INPUT IN$:OPEN #1,8,0,"D:AUTORUN.SYS"90 PUT #1,255:PUT #1,255:PUT #1,128:PU0100 ; BRICKLAYER'S NIGHTMARE0101 ; ######################0102 ; BY G.M. ROBSON0103 ; ANALOG COMPUTING #150104 ;0105} ; DISPLAY LIST VALUES0106 ; -------------------0107 BL8 = $70 BLANK 8 SCAN LINES0108 CH2 = $02 CHAR LINE 40H X 8V, 2 }COLOR0109 CH4 = $04 CHAR LINE 40H X 8V, 4 COLOR0110 CH6 = $06 CHAR LINE 20H X 8V, 5 COLOR0111 CH7 = $07 CHAR LINE 20H X} 16V, 5 COLOR0112 JVB = $41 JMP ON VERT BLANK INST0113 LMS = $40 MASK TO LOAD MEM SCAN ADR0114 ;0115 ; OS EQUATES0116} ; ----------0117 ATRACT = $4D ATTRACT MODE COUNTER0118 AUDC1 = $D201 AUDIO CONTROL 10119 AUDF1 = $D200 AUDIO FREQ 10120} GRACTL = $D01D GRAPHICS CTRL REG0121 HITCLR = $D01E COLLISION CLEAR0122 HPOSP0 = $D000 MAN HORIZ POS0123 HPOSP1 = $D001 D}OG 1 HORIZ POS0124 HPOSP2 = $D002 DOG 2 HORIZ POS0125 P0PL = $D00C PLYR 0(MAN) AND PLAYER COLLISIONS0126 PMBASE = $D407 PM} BASE ADR0127 SIZEP0 = $D008 SIZE OF PLAYER 00128 HPOSP3 = $D003 DOG 3 HORIZ POS0129 ;0130 ; SYSTEM SHADOW REGS0131 ; }------------------0132 CHBAS = $02F4 CHAR SET HO ADR0133 COLOR0 = $02C4 PLAYFIELD 0 COLOR REG0134 COLOR1 = $02C5 PLAYFIELD} 1 COLOR REG0135 COLOR2 = $02C6 PLAYFIELD 2 COLOR REG0136 COLOR3 = $02C7 PLAYFIELD 3 COLOR REG0137 COLOR4 = $02C8 BACKGROU}ND COLOR0138 ;0139 SDLSTL = $0230 DISPLAY LIST PNTR0140 PCOLR0 = $02C0 MAN COLOR REG0141 PCOLR1 = $02C1 DOG 1 COLOR REG0}142 PCOLR2 = $02C2 DOG 2 COLOR REG0143 PCOLR3 = $02C3 DOG 3 COLOR REG0144 SDMCTL = $022F DMA CTRL0145 STICK0 = $0278 JOYST}ICK 10146 STRIG0 = $0284 TRIGGER 10147 ;0148 ; PAGE ZERO VARIABLES0149 ; -------------------0150 DESADR = $80 DEST ADR}0151 SRCADR = $82 SRCE ADR0152 SIZE = $84 # OF BYTES INVOLVED0153 ;0154 ; JOYSTICK VALUES0155 ; ---------------0156 }DOWN = 130157 DOWNLEFT = 90158 DOWNRGT = 50159 LEFT = 110160 RIGHT = 70161 UP = 140162 ;0163 UPLEFT = 100164 UPRIGHT }= 60165 ;0166 ; BRICKLAYER VALUES0167 ; -----------------0168 BMPS = 250 BRICK MOVES PER SCREEN0169 BRKPOINT = 45 POI}NTS FOR 1 BRICK MOVE0170 ;0171 CHSIZE = 512 SIZE OF CHAR SET (ONLY 512 NEEDED)0172 DMAVAL = 62 ENABLE INSTRUCTION FETCH D}MA0173 ; 1 LINE P/M RESOLUTION0174 ; ENABLE PLAYER DMA0175 ; ENABLE MISSILE DMA0176 ; 160 COLOR CLOCK} PLAYFIELD DMA0177 ;0178 GRAVAL = 3 SET TRIG0-TRIG3 NORMAL INPUTS0179 ; ENABLE DMA TO PLAYER GRAPHICS REGS0180 ; } ENABLE DMA TO MISSILE GRAPHICS REGS0181 ;0182 INDOG1H = 120 INITIAL DOG 1 HORIZ POS0183 INDOG2H = 140 INITIAL DOG 2 HOR}IZ POS0184 INDOG3H = 160 INITIAL DOG 3 HORIZ POS0185 INMANH = 80 INITIAL MAN HORIZ POS0186 INMANV = 175 INITIAL MAN VERT }POS0187 ;0188 M2LSIZE = 40 MODE 2 LINE SIZE0189 M4LSIZE = 40 MODE 4 LINE SIZE0190 M7LSIZE = 20 MODE 7 LINE SIZE0191 ;01}92 PF0CMASK = $00 MASK TO USE PLAYFIELD 0 COLOR0193 PF1CMASK = $40 MASK TO USE PLAYFIELD 1 COLOR0194 PF2CMASK = $80 MASK TO} USE PLAYFIELD 2 COLOR0195 PF3CMASK = $C0 MASK TO USE PLAYFIELD 3 COLOR0196 ;0197 PFLINES = 16 # OF LINES WHERE PLAY OCCUR}S0198 SCRSIZ = 640 # OF BYTES IN DISPLAY AREA0199 ;0200 BC = 62 BRICK CHAR0201 LC = 61 MAN LIFE CHAR0202 WC = 63 WALL} CHARACTER0203 ;0204 ; SCREEN VALUES0205 ; -------------0206 BORDB = $B0 BOTTOM BORDER LINE FOR PLAY AREA0207 BORDL =} $33 LEFT BORDER COL FOR PLAY AREA0208 BORDR = $C6 RIGHT BORDER COL FOR PLAY AREA0209 BORDT = $38 TOP BORDER LINE FOR PL}AY AREA0210 ;0211 ; COLORS0212 ; ------0213 GREY = $000214 ORANGE = $200215 REDORG = $300216 PINK = $400217 BLUE = }$800218 YELGRN = $D00219 ;0220 COLPF2 = $D0180221 COLOR = $800222 WSYNC = $D40A0223 ;0224 *= $20000225 ;0226 ; P/M} RAM SPACE0227 ; -------------0228 PM *= *+768 1ST AREA NOT USED0229 MISL *= *+256 MISSILE GRAPHICS AREA0230 PLR0 *= *+2}56 PLAYER 0 GRAPHICS AREA0231 PLR1 *= *+256 PLAYER 1 GRAPHICS AREA0232 PLR2 *= *+256 PLAYER 2 GRAPHICS AREA0233 PLR3 *= *+}256 PLAYER 3 GRAPHICS AREA0234 ;0235 PLEND = *0236 PLDIFF = PLEND-MISL0237 ;0238 CUSCS *= *+512 CUSTOM CHAR SET0239 DIS}P *= *+SCRSIZ ACTUAL PLAY AREA0240 FIRSTBR = DISP+91 ADDR OF 1ST BRICK0241 ;0242 WALLLINE0243 .BYTE WC,WC,WC,WC,WC,WC,WC},WC,WC,WC0244 .BYTE WC,WC,WC,WC,WC,WC,WC,WC,WC,WC0245 ;0246 ; BRICKLAYER DISPLAY LIST0247 ; -----------------------02}48 DL .BYTE BL8,BL8 BLANK SCRN TOP0249 .BYTE BL8,BL80250 ;0251 .BYTE CH7+LMS0252 .WORD WALLLINE SHOW WALL LINE0253 .}BYTE CH4+LMS SET MAIN SCRN DISPLAY ADR0254 .WORD DISP0255 ;0256 .BYTE CH4,CH4 DEFINE MAIN SCREEN DISPLAY AREA0257 .BYT}E CH4,CH40258 .BYTE CH4,CH40259 .BYTE CH4,CH40260 .BYTE CH4,CH40261 .BYTE CH4,CH40262 .BYTE CH4,CH40263 .BYTE CH4}0264 .BYTE CH7+LMS0265 .WORD WALLLINE SHOW WALL LINE0266 ;0267 .BYTE CH6+LMS SET SCORE LINE ADR0268 .WORD SLINE0269} ;0270 .BYTE JVB JMP ON VERT BLANK0271 .WORD DL TO DISPLAY LIST START0272 ;0273 ; RETURN SCREEN TO NORMAL0274 ; ----}-------------------0275 NORMAL0276 LDA #$000277 STA GRACTL0278 LDA #$220279 STA SDMCTL0280 LDA #$200281 STA SDLS}TL0282 LDA #$BC0283 STA SDLSTL+10284 ;0285 LDA #$E00286 STA CHBAS0287 ;0288 ; MAIN LINE0289 ; ---------0290 MA}INRTN0291 JSR INIT INITIALIZE0292 JSR INITPM INIT PLAYERS0293 ;0294 ; START NEW LEVEL0295 ; ---------------0296 STA}RTLEV JSR INITBRKS SETUP INITIAL BRICKS0297 JSR SETNLEV SET NEXT LEVEL0298 JSR INITLEV INIT LEVEL VALUES0299 ;0300 ; S}TART NEW LIFE0301 ; --------------0302 STLIFE JSR INITPM INIT PLAYERS0303 JSR SHOWLIVS SHOW LIVES REMAINING0304 MAIN1 J}SR CHKMANOK DID MAN COLLIDE WITH DOG ?0305 BNE REMMAN YES, SO REMOVE MAN0306 JSR MOVMAN MOVE THE MAN0307 LDA BMOVES GET} # OF BRICKS LEFT0308 BNE MAIN2 MORE, SO CONTINUE0309 JMP STARTLEV START NEXT LEVEL0310 ;0311 MAIN2 DEC DOGMOVCT CAN DO}GS MOVE YET ?0312 BNE Q1 NO0313 LDA DOGFREQ1 YES, RESET NORMAL DOG MOVE CNT0314 STA DOGMOVCT0315 LDA STRIG0 IS TRIG }DOWN ?0316 BNE Q2 NO, LEAVE NORMAL DOG MOVE CNT0317 LDA DOGFREQ2 ELSE, SET FASTER DOG COUNT0318 STA DOGMOVCT AND SAVE}0319 ;0320 Q2 JSR MOVDOG1 MOVE DOG 10321 JSR MOVDOG2 MOVE DOG 20322 JSR MOVDOG3 MOVE DOG 30323 Q1 JSR MDELAY DO MAIN DE}LAY0324 LDA BSNDFLAG DID BRICK JUST MAKE SOUND ?0325 BNE MAIN1 YES, SO DON'T DELAY0326 JMP MAIN10327 ;0328 REMMAN032}9 JSR KILLMAN SHOW MAN'S DOWNFALL0330 DEC LIVES REDUCE # OF LIVES LEFT0331 BPL STLIFE START NEW LIFE0332 ;0333 ; END }OF GAME0334 ; -----------0335 LDX #0 INIT INDEX0336 SHOWOVER LDA ENDMSG,X GET 'GAME OVER' BYTE0337 CMP #$FF END OF MS}G ?0338 BEQ WAITSTRT YES, SO WAIT TO START AGAIN0339 ORA #PF3CMASK MAKE CHAR PLAYFIELD 3 COLOR0340 STA SLINE+3,X PUT MS}G BYTE ON SCRN0341 INX PNT TO NEXT BYTE0342 JMP SHOWOVER SHOW NEXT BYTE0343 ;0344 WAITSTRT LDA STRIG0 IS TRIGGER PRES}SED ?0345 BNE WAITSTRT NO, SO WAIT0346 STA ATRACT TRIG PUSHED, SO DISABLE ATTRACT0347 JMP MAINRTN YES, SO START AGAIN0}348 ;0349 ; CLEAR PM AREA0350 ; -------------0351 INITPM0352 LDA #MISL&2550353 STA DESADR SET START ADR LO0354 LDA} #MISL/2560355 STA DESADR+1 SET START ADR HO0356 LDA #PLDIFF&2550357 STA SIZE SET SIZE LO0358 LDA #PLDIFF/2560359 S}TA SIZE+1 SET SIZE HO0360 LDX #0 SET FILL CHAR0361 JSR FILL CLEAR PM AREA0362 ;0363 ; INIT PLAYERS COLORS & POSITIONS}0364 ; -------------------------------0365 LDX #4 SET # OF PLAYERS0366 LDA #00367 INITPSIZ STA SIZEP0-1,X SET NORMAL }PLAYER SIZE0368 DEX MORE PLAYER SIZES TO INIT ?0369 BNE INITPSIZ YES0370 ;0371 LDA #BLUE+6 SET COLOR & LUM0372 STA} PCOLR0 SET PLAYER 0 COLOR0373 LDA #PINK+8 SET COLOR & LUM0374 STA PCOLR1 FOR DOG0375 STA PCOLR2 SET DOG 2 COLOR & LUM}0376 STA PCOLR3 SET DOG 3 COLOR & LUM0377 ;0378 LDA #INMANH GET MAN'S INITIAL HORIZ POS0379 STA MANPOSH SAVE HORIZ POS}0380 STA HPOSP0 SET IT0381 LDA #INDOG1H GET DOG 1'S INITIAL HORIZ POS0382 STA DOG1POSH SAVE HORIZ POS0383 STA HPOSP1 S}ET IT0384 LDA #INDOG2H GET DOG 2'S INITIAL HORIZ POS0385 STA DOG2POSH SAVE HORIZ POS0386 STA HPOSP2 SET IT0387 LDA #I}NDOG3H GET DOG 3'S INITIAL HORIZ POS0388 STA DOG3POSH SAVE HORIZ POS0389 STA HPOSP3 SET IT0390 ;0391 LDA #INMANV GET M}AN'S INITIAL VERT POS0392 STA MANPOSV SAVE MAN'S VERT POS0393 STA DOG1POSV SAVE DOG 1'S VERT POS0394 STA DOG2POSV SAVE }DOG 2'S VERT POS0395 STA DOG3POSV SAVE DOG 3'S VERT POS0396 ;0397 ; PUT INITIAL MAN IMAGE ON SCREEN0398 ; ------------}-------------------0399 LDA #10400 STA MANPICNO PNT TO 1ST MAN IMAGE0401 JSR PUTMAN PUT MAN IN PLAYER AREA0402 ;0403 }; PUT INITIAL DOGS ON SCREEN0404 ; --------------------------0405 INITDOG LDX #8 SET # OF BYTES IN DOG IMAGE0406 Q3 LDA }DOGIMAGE-1,X GET DOG IMAGE BYTE0407 STA PLR1+INMANV-1,X PUT DOG BYTE IN PLAYER 10408 STA PLR2+INMANV-1,X PUT DOG BYTE IN }PLAYER 20409 STA PLR3+INMANV-1,X PUT DOG BYTE IN PLAYER 30410 DEX MORE BYTES IN PLAYER ?0411 BNE Q3 YES0412 ;0413 } LDA #PM/256 GET HI BYTE OF PM ADR0414 STA PMBASE SET PM ADR0415 ;0416 STA HITCLR CLEAR COLLISIONS0417 ;0418 RTS RE}T TO MAIN RTN0419 ;0420 ; SETUP CHAR SET0421 ; --------------0422 INIT0423 LDA #00424 STA SRCADR SET ORIG CHAR SET }LO ADR0425 LDA CHBAS0426 STA SRCADR+1 SET ORIG CHAR SET HO ADR0427 LDA #CUSCS&2550428 STA DESADR SET CUSTOM CHAR SET }LO ADR0429 LDA #CUSCS/2560430 STA DESADR+1 SET CUSTOM CHAR SET HO ADR0431 LDA #CHSIZE&255 GET SIZE OF CHSET LO BYTE043}2 STA SIZE SAVE FOR MOVE0433 LDA #CHSIZE/256 SET # OF 256 BYTE BLOCKS TO MOVE0434 STA SIZE+1 SAVE SIZE HO BYTE0435 JSR} MOVE MOVE CHAR SET TO RAM0436 ;0437 ; REDEFINE CHARACTERS0438 ; -------------------0439 LDX #24 SET # OF BYTES IN CH }ARS0440 Q4 LDA LIFEPAT-1,X GET NEW CHAR BYTE0441 STA CUSCS+488-1,X PUT INTO CUSTOM CHAR SET0442 DEX MORE BYTES ?0443  } BNE Q4 YES0444 ;0445 LDA #CUSCS/256 GET CUSTOM CHSET H0 ADR0446 STA CHBAS SET NEW CHAR SET ADR0447 ;0448 ; INIT SCR }EEN0449 ; -----------0450 JSR CLSCRN CLEAR SCREEN0451 LDA #DL&255 SET DL LO BYTE0452 STA SDLSTL0453 LDA #DL/256 SET } DL HI BYTE0454 STA SDLSTL+10455 ;0456 ; SET PLAYFIELD COLORS0457 ; --------------------0458 LDA #GREY+00459 STA C }OLOR4 SET BACKGROUND COLOR0460 LDA #ORANGE+80461 STA COLOR0 SET PLAYFIELD 0 COLOR0462 LDA #GREY+$0A0463 STA COLOR1 SE}T PLAYFIELD 1 COLOR0464 LDA #YELGRN+80465 STA COLOR2 SET PLAYFIELD 2 COLOR0466 LDA #REDORG+80467 STA COLOR3 SET PLAYF}IELD 3 COLOR0468 ;0469 LDA #DMAVAL SET DMA CONTROL0470 STA SDMCTL0471 LDA #GRAVAL SET GRAPHICS CONTROL0472 STA GRACT}L0473 ;0474 ; INIT SCORE LINE0475 ; ---------------0476 LDX #SLEND-SLINE SET SIZE OF SCORE LINE0477 LDA #0 SET BLAN}K CHAR0478 Q5 STA SLINE-1,X BLANK SCORE LINE0479 DEX MORE TO BLANK ?0480 BNE Q5 YES0481 ;0482 LDA DIGITS+0 GET ATA}SCII FOR '0'0483 LDX #6 SET # OF DIGITS IN SCORE0484 INITSCOR STA SCORE-1,X PUT 0 SCORE DIGIT0485 DEX MORE DIGITS ?0}486 BNE INITSCOR YES0487 ;0488 LDA DIGITS+0 GET ATASCII FOR '0'0489 ORA #PF1CMASK MAKE IT PLAYFIELD 1 COLOR0490 STA L}EVEL SET LEVEL 10491 ;0492 LDA #30493 STA LIVES INIT # OF LIVES0494 ;0495 ; DRAW WALLS0496 ; ----------0497 DRAWWA}LL0498 LDA #WC GET WALL CHAR0499 STA TEMP SAVE FOR TRANSFER0500 STA DISP PUT WALL CHAR ON SCRN0501 LDX #PFLINES SET }# OF LINES TO PUT WALL ON0502 LDA #DISP&2550503 STA DESADR SAVE LO ADR0504 LDA #DISP/2560505 STA DESADR+1 SAVE HO ADR}0506 PNTWALL LDA #M4LSIZE-1 SET VALUE TO PNT TO LINE END0507 JSR PUTSCRCH PUT WALL CHAR AT LINE END0508 DEX MORE WALL }CHARS ?0509 BEQ Q6 NO, SO EXIT0510 LDA #1 SET VALUE TO PNT TO NEXT LINE0511 JSR PUTSCRCH PUT WALL CHAR AT NEXT LINE S}TART0512 JMP PNTWALL PUT NEXT WALL CHAR0513 Q6 RTS RET TO MAIN PROGRAM0514 ;0515 PUTSCRCH CLC SETUP FOR ADD0516 ADC }DESADR ADD TO DEST LO ADR0517 STA DESADR SAVE DEST LO ADR0518 LDA DESADR+1 GET DEST HO ADR0519 ADC #0 ADD CARRY IF ANY}0520 STA DESADR+1 SAVE DEST HO ADR0521 LDA TEMP GET CHAR TO PUT ON SCRN0522 LDY #0 ZERO INDEX0523 STA (DESADR),Y PUT} WALL CHAR ON SCRN0524 RTS 0525 ;0526 ; CLEAR PLAYFIELD0527 ; ---------------0528 CLSCRN0529 LDA #DISP&2550530 ST}A DESADR SET DEST LO ADR0531 LDA #DISP/2560532 STA DESADR+1 SET DEST HO ADR0533 LDA #SCRSIZ&2550534 STA SIZE SET SIZE} OF FILL LO BYTE0535 LDA #SCRSIZ/2560536 STA SIZE+1 SET SIZE OF FILL HO BYTE0537 LDX #0 SET FILL CHAR0538 JSR FILL C}LEAR THE SCRN AREA0539 RTS 0540 ;0541 ; INIT LEVEL VALUES0542 ; -----------------0543 INITLEV LDA LEVEL GET CURRENT L }EVEL0544 AND #$0F MAKE IT BINARY #0545 TAX 0546 LDA #0 INIT OFFSET0547 Q7 DEX IS THIS THE LEVEL ?0548 BEQ Q8 YES!},SET LEVEL VALUES0549 CLC SETUP FOR ADD0550 ADC #4 PNT TO NEXT LEVEL VALUES0551 JMP Q7 SEE IF THIS IS THE LEVEL055"}2 Q8 TAX GET OFFSET0553 LDA LEVTBL,X GET NORMAL DOG MOVES/MAN MOVE0554 STA DOGFREQ1 SET IT0555 LDA LEVTBL+1,X GET DOG#}/MAN MOVES (PULLING WALL)0556 STA DOGFREQ2 SAVE IT0557 LDA LEVTBL+2,X GET MAIN LOOP HO VALUE0558 STA MDELHO SET IT0559$} LDA LEVTBL+3,X GET MAIN LOOP LO VALUE0560 STA MDELLO SET IT0561 ;0562 LDA #BMPS GET # OF BRICKS TO MOVE0563 STA BMOV%}ES0564 ;0565 RTS EXIT0566 ;0567 ; READ JOYSTICK & MOVE MAN0568 ; ------------------------0569 MOVMAN LDA STICK0 RE&}AD JOYSTICK0570 CMP #LEFT MOVE LEFT ?0571 BNE CHKJSR NO, SO CHECK RIGHT0572 ;0573 ;0574 MOVMANL JSR SETMANL SET MAN LE'}FT0575 SETHIM DEC MANPICNO ELSE, SET NEXT MAN IMAGE #0576 BNE SHONEWM IF VALID, SHOW NEW MAN0577 LDA #5 ELSE, SET VALID(} MAN IMAGE0578 STA MANPICNO SAVE MAN IMAGE #0579 SHONEWM JSR PUTMAN SHOW MAN0580 RTS EXIT0581 ;0582 SETMANL DEC MANP)}OSH PNT TO COL TO LEFT0583 LDA #BORDL GET LEFT LIMIT0584 CMP MANPOSH AT LEFT LIMIT ?0585 BEQ MOVLERR YES, SO ERROR0586*} LDY MANPOSH GET HORIZ POS0587 LDX MANPOSV GET VERT POS0588 JSR CHKLRM SEE IF MOVE IS OK0589 BNE MOVLERR SOMETHING THE+}RE, CAN'T MOVE0590 ;0591 LDA MANPOSH GET CURRENT MAN HORIZ POS0592 STA HPOSP0 SET HARDWARE HORIZ REG0593 RTS 0594 ;0,}595 MOVLERR INC MANPOSH SET ORIG COL0596 RTS EXIT0597 ;0598 CHKJSR CMP #RIGHT MOVE RIGHT ?0599 BEQ MOVMANR YES, SO MO-}VE MAN RIGHT0600 ;0601 CMP #UP MOVE UP ?0602 BEQ MOVMANU YES, MOVE MAN UP0603 ;0604 CMP #DOWN MOVE DOWN ?0605 BEQ .}MOVMAND YES, MOVE MAN DOWN0606 JMP CHKANGLS CHECK JOYSTICK ANGLES0607 ;0608 ;0609 MOVMANR JSR SETMANR SET MAN TO RIGHT0/}610 JSR MOVBRICK MOVE BRICK IF APPROPRIATE0611 JMP SETHIM SET NEW HORIZ IMAGE0612 ;0613 SETMANR INC MANPOSH SET COL TO R0}IGHT0614 LDA #BORDR GET # OF RIGHT BORDER0615 CMP MANPOSH AT RIGHT BORDER ?0616 BEQ MOVRERR YES, SO ERROR0617 ;0618 1}LDX MANPOSV GET MAN VERT POS0619 LDA MANPOSH GET HORIZ POS0620 CLC SETUP FOR ADD0621 ADC #7 PNT TO RIGHT SIDE OF PLA2}YER0622 TAY 0623 JSR CHKLRM SEE IF MOVE OK0624 BNE MOVRERR CHAR THERE, SO ERROR0625 ;0626 ;0627 LDA MANPOSH GET CUR3}RENT MAN HORIZ POS0628 STA HPOSP0 SET HARDWARE HORIZ REG0629 RTS 0630 MOVRERR DEC MANPOSH SET ORIGINAL MAN HORIZ POS0634}1 RTS EXIT0632 ;0633 MOVMANU DEC MANPOSV SET LINE ABOVE0634 LDA #BORDT GET # OF TOP BORDER0635 CMP MANPOSV AT TOP BO5}RDER ?0636 BEQ MOVUERR YES, SO RESET PNTR0637 ;0638 LDY MANPOSH GET HORIZ POS0639 LDX MANPOSV GET VERT POS0640 JSR C6}HKUDM CHK UP DOWN MOVE0641 BEQ SETVIM BLANK, SO MOVE OK0642 MOVUERR INC MANPOSV SET ORIGINAL POS0643 SETVIM INC MANPICNO 7}SET NEXT VERT IMAGE0644 LDA #10 GET 1 BEYOND MAX IMAGE #0645 CMP MANPICNO IS MAN IMAGE # VALID ?0646 BNE Q9 YES0647 8} LDA #6 NO, SO SET VALID IMAGE #0648 STA MANPICNO SAVE NEW MAN IMAGE #0649 Q9 LDX MANPOSV GET MAN POSITION FOR INDEX06509} LDA #00651 STA PLR0+8,X BLANK BYTES AROUND OLD MAN IMAGE0652 STA PLR0-1,X0653 JSR PUTMAN PUT NEW IMAGE IN PLAYER AREA:}0654 RTS EXIT0655 ;0656 ;0657 MOVMAND INC MANPOSV SET LINE BELOW0658 LDA #BORDB GET # OF BOTTOM BORDER0659 CMP MAN;}POSV AT BOTTOM BORDER ?0660 BEQ MOVDERR YES, SO RESET PNTR0661 ;0662 LDY MANPOSH SET HORIZ POS0663 LDA MANPOSV GET VER<}T POS0664 CLC PREPARE FOR ADD0665 ADC #7 PNT TO LINE BELOW0666 TAX SAVE VERT POS0667 JSR CHKUDM CHK UP DOWN MOVE=}0668 BEQ SETVIM BLANK, SO MOVE OK0669 ;0670 MOVDERR DEC MANPOSV YES, SO SET ORIGINAL LINE #0671 JMP SETVIM SET NEW VERT>} IMAGE0672 ;0673 CHKANGLS CMP #UPLEFT MOVE UP LEFT ?0674 BEQ MOVMANUL YES0675 ;0676 CMP #UPRIGHT MOVE UP RIGHT ?0677 ?} BEQ MOVMANUR YES0678 ;0679 CMP #DOWNLEFT MOVE DOWN LEFT ?0680 BEQ MOVMANDL YES0681 ;0682 CMP #DOWNRGT MOVE DOWN RIGH@}T ?0683 BEQ MOVMANDR YES0684 ;0685 RTS EXIT TO MAIN LINE0686 ;0687 MOVMANUL JSR SETMANL SET MAN LEFT0688 JSR MOVMAA}NU MOVE MAN UP0689 RTS 0690 ;0691 MOVMANUR JSR SETMANR SET MAN RIGHT0692 JSR MOVMANU MOVE MAN UP0693 RTS 0694 ;0695B} MOVMANDL JSR SETMANL SET MAN LEFT0696 JSR MOVMAND MOVE MAN DOWN0697 RTS 0698 ;0699 MOVMANDR JSR SETMANR SET MAN RIGHTC}0700 JSR MOVMAND MOVE MAN DOWN0701 RTS 0702 ;0703 .INCLUDE #D:BRICKS20704 *= $02E00705 .WORD MAINRTN0706 .END T{0703 ; CHECK UP DOWN MOVE0704 ; ------------------0705 CHKUDM0706 STY TEMP SAV HORIZ POS0707 STX TEMP+1 SAV VERT POS!E}0708 JSR GETSCRN GET SCRN CHAR0709 BNE Q10 CHAR THERE, SO EXIT0710 LDX TEMP+1 GET VERT POS0711 LDA TEMP GET HORIZ POS!F}0712 CLC SETUP FOR ADD0713 ADC #4 PNT TO MIDDLE OF PLAYER0714 TAY 0715 JSR GETSCRN GET SCRN CHAR0716 BNE Q10 CH!G}AR THERE, SO EXIT0717 LDX TEMP+1 GET VERT POS0718 LDA TEMP GET HORIZ POS0719 CLC SETUP FOR ADD0720 ADC #6 PNT TO R!H}IGHT SIDE OF PLAYER0721 TAY 0722 JSR GETSCRN GET SCRN CHAR0723 Q10 RTS 0724 ;0725 ; CHECK LEFT RIGHT MOVE0726 ; ---!I}------------------0727 CHKLRM STY TEMP SAVE HORIZ POS0728 STX TEMP+1 SAVE VERT POS0729 JSR GETSCRN GET SCRN CHAR0730 B!J}NE Q11 SOMETHING THERE, SO EXIT0731 LDY TEMP GET HORIZ POS0732 LDA TEMP+1 GET VERT POS0733 CLC PREPARE FOR ADD0734 !K} ADC #7 PNT TO PLAYER BOTTOM LINE0735 TAX 0736 JSR GETSCRN GET SCRN CHAR0737 Q11 RTS EXIT0738 ;0739 ; PUT MAN IMAG!L}E IN PLAYER AREA0740 ; ----------------------------0741 PUTMAN LDX MANPICNO GET CURRENT MAN IMAGE #0742 LDA #-80743 Q12!M} CLC 0744 ADC #8 CALC0745 DEX IMAGE0746 BNE Q12 OFFSET0747 ;0748 TAY SET IMAGE OFFSET0749 LDA #8 SET # OF B!N}YTES IN IMAGE0750 STA SIZE AND SAVE0751 LDX MANPOSV GET CURRENT VERT POS0752 ;0753 Q13 LDA MANH1,Y GET MAN IMAGE BYTE0!O}754 STA PLR0,X PUT IN PLAYER AREA0755 INX PNT TO NEXT PLAYER AREA BYTE0756 INY PNT TO NEXT IMAGE BYTE0757 DEC SIZE!P} MORE TO MOVE ?0758 BNE Q13 YES, SO MOVE THEM0759 RTS 0760 ;0761 ; GET SCREEN CHAR0762 ; ---------------0763 ; EN!Q}TER WITH:0764 ;0765 ; REG X = SCAN LINE #0766 ; REG Y = COLOR CLOCK #0767 ;0768 GETSCRN TXA GET LINE #0769 SEC SE!R}TUP FOR SUBT0770 SBC #$38 PNT TO PLAY AREA0771 LSR A DIVIDE LINE # BY 80772 LSR A # OF LINES IN CHAR0773 LSR A0774!S} TAX AND SAVE0775 TYA GET COL #0776 SEC SETUP FOR SUBT0777 SBC #$30 COMPENSATE FOR SCRN LEFT EDGE0778 LSR A D!T}IVIDE COL BY 40779 LSR A # OF COLS IN CHAR0780 TAY AND SAVE0781 LDA #DISP&255 GET PLAY AREA START (LO)0782 STA DES!U}ADR ; & SAVE0783 LDA #DISP/256 GET PLAY AREA START (HO)0784 STA DESADR+1 ; & SAVE0785 Q14 DEX IS LINE # 0 ?0786 BMI !V}Q15 YES, SO ADD COL VALUE0787 CLC SETUP FOR ADD0788 LDA DESADR GET PLAY AREA ADR (LO)0789 ADC #M4LSIZE PNT TO NEXT L!W}INE0790 STA DESADR ; & SAVE0791 LDA DESADR+1 GET PLAY AREA ADR (HO)0792 ADC #0 ADD CARRY IF ANY0793 STA DESADR+1 ; &!X} SAVE0794 JMP Q14 SEE IF LINES ACCOUNTED FOR0795 ;0796 Q15 TYA GET COL #0797 CLC SETUP FOR ADD0798 ADC DESADR AD!Y}D COL TO ADR (LO)0799 STA DESADR ; & SAVE0800 LDA #00801 ADC DESADR+1 ADD CARRY IF ANY TO HO ADR0802 STA DESADR+1 ; &!Z} SAVE0803 LDY #0 CLEAR INDEX0804 LDA (DESADR),Y GET SCREEN CHAR0805 RTS ELSE, EXIT0806 ;0807 ; MOVE DOG 10808 ; ![} ----------0809 ; DOG 1 ALIGNS ITSELF ON MAN'S HORIZ AXIS0810 ; AND ATTACKS ON VERT AXIS0811 ;0812 MOVDOG10813 LDA #0!\}0814 STA DOGNO SET DOG 1 OFFSET0815 JSR MOVDOGH MOVE DOG HORIZ0816 BEQ CHKDOG1V NO MOVE, SO TRY VERTICAL0817 RTS EX!]}IT0818 CHKDOG1V JSR CHKDOGV MOVE DOG VERTICAL0819 RTS EXIT0820 ;0821 ; MOVE DOG 20822 ; ----------0823 ; DOG 2 AL!^}IGNS ITSELF ON MAN'S VERT AXIS0824 ; AND ATTACKS ON HORIZ AXIS0825 ;0826 MOVDOG20827 LDA #10828 STA DOGNO SET DOG 2 O!_}FFSET0829 JSR CHKDOGV MOVE DOG VERT IF POSSIBLE0830 BEQ CHKDOG2H NO MOVE, SO TRY HORIZ0831 RTS ELSE, EXIT0832 CHKDOG!`}2H0833 JSR MOVDOGH MOVE DOG HORIZ0834 RTS EXIT0835 ;0836 ; MOVE DOG 30837 ; ----------0838 ; DOG 3 MOVES ON VERT!a} & HORIZ PLANES ON SAME TURN0839 ; TO REACH THE MAN0840 ;0841 MOVDOG30842 LDA #20843 STA DOGNO SET DOG 3 OFFSET0844 !b} JSR MOVDOGH MOVE DOG HORIZ0845 JSR CHKDOGV MOVE DOG 3 VERT IF POSSIBLE0846 RTS EXIT0847 ;0848 ; MOVE DOG VERTICALLY!c}0849 ; -------------------0850 CHKDOGV0851 LDA #PLR1&255 GET 1ST DOG PLAY ADR (LO)0852 STA DESADR ; & SAVE0853 LDA #!d}PLR1/256 GET 1ST DOG PLAY ADR (HO)0854 STA DESADR+1 ; & SAVE0855 LDY DOGNO GET CURRENT DOG #0856 Q16 BEQ Q17 MATCH, SO !e}START MOVE0857 INC DESADR+1 ELSE, SET NEXT DOG PLAY AREA0858 DEY SET Z FLAG IF MATCH0859 JMP Q16 SEE IF MATCH NOW08!f}60 ;0861 Q17 LDX DOGNO GET CURRENT DOG #0862 LDA DOGPOSV,X GET DOG VERT POS0863 CMP MANPOSV COMPARE WITH MAN VERT POS08!g}64 BNE Q18 NOT SAME, SO MOVE VERTICAL0865 RTS SAME, SO EXIT0866 Q18 BCS MOVDOGU MAN ABOVE, MOVE DOG UP0867 MOVDOGD LD!q}B ALTKBD3 BASBJ$DOS SYSBnSCROLL1 BASBvSCROLL2 BASB*BRICMAINBASBBRICCASSLSTBBRICDISKLSTBBRICKS1 ASMBDBRICKS2 ASMBBOOT1 ASMBBOOT3 ASMBBOOT5 ASMBBOOT6 ASMBBOOT7 ASMA DESADR0868 PHA SAVE DOG PLAY AREA (LO)0869 LDA DESADR+10870 PHA SAVE DOG PLAY AREA (HO)0871 LDA DOGPOSH,X GET D!r}OG HORIZ POS0872 TAY 0873 LDA DOGPOSV,X GET DOG VERT POS0874 CLC SETUP ADD0875 ADC #8 PNT TO LINE BELOW0876 TAX !s}0877 JSR CHKUDM CHECK FOR BRICKS0878 BEQ Q19 NO BRICKS, SO CONTINUE0879 PLA 0880 PLA CLEAR STACK0881 LDA #0 ELS!t}E, SET Z FLAG(NO MOVE)0882 RTS AND EXIT0883 Q19 LDX DOGNO GET CURRENT DOG #0884 PLA GET DOG PLAY ADR (HO)0885 STA !u}DESADR+10886 PLA GET DOG PLAY ADR (LO)0887 STA DESADR0888 LDY DOGPOSV,X GET LINE #0889 STA (DESADR),Y BLANK AROUND !v}OLD DOG0890 INC DOGPOSV,X PNT TO NEW LINE0891 INY 0892 SHONEWD LDX #0 SET SRCE INDEX0893 LDA #8 SET # OF BYTES IN DOG!w} IMAGE0894 STA SIZE SAVE # OF BYTES0895 Q20 LDA DOGIMAGE,X GET DOG IMAGE BYTE0896 STA (DESADR),Y PUT IN DOG PLAY AREA08!x}97 INX PNT TO NEXT PLAYER AREA BYTE0898 INY PNT TO NEXT DOG IMAGE BYTE0899 DEC SIZE MORE BYTES TO MOVE ?0900 BNE Q!y}20 YES0901 LDA #1 NO, SET NZ FLAG(MOVE OCCURRED)0902 RTS 0903 ;0904 MOVDOGU LDX DOGNO GET CURRENT DOG #0905 LDA DES!z}ADR0906 PHA SAVE DOG PLAY AREA (LO)0907 LDA DESADR+10908 PHA SAVE DOG PLAY AREA (HO)0909 LDA DOGPOSH,X GET DOG HO!{}RIZ POS0910 TAY 0911 LDA DOGPOSV,X GET DOG VERT POS0912 TAX 0913 DEX PNT TO LINE ABOVE0914 JSR CHKUDM SEE IF ANY !|}BRICKS0915 BEQ Q21 NO BRICKS, SO OK0916 PLA 0917 PLA CLEAR STACK0918 LDA #0 SET Z FLAG (NO MOVE)0919 RTS 0920 !}}Q21 LDX DOGNO GET CURRENT DOG #0921 PLA GET DOG PLAY ADR (HO)0922 STA DESADR+10923 PLA GET DOG PLAY ADR (LO)0924 !~}STA DESADR0925 DEC DOGPOSV,X PNT TO LINE ABOVE0926 LDA DOGPOSV,X GET NEW LINE #0927 PHA SAVE IT0928 CLC SETUP ADD!}0929 ADC #8 PNT TO END OF DOG0930 TAY SET INDEX REG0931 LDA #0 SET VALUE TO BLANK DOG CHAR0932 STA (DESADR),Y BLA!}NK AROUND OLD DOG0933 PLA GET NEW LINE #0934 TAY 0935 JMP SHONEWD SHOW NEW DOG IMAGE0936 ;0937 ; MOVE DOG HORIZONT!}ALLY0938 ; ---------------------0939 MOVDOGH0940 LDX DOGNO GET CURRENT DOG #0941 LDA DOGPOSH,X GET HORIZ POS0942 CMP!} MANPOSH COMPARE WITH MAN'S HORIZ POS0943 BNE Q22 NOT SAME, SO MOVE0944 RTS ELSE, EXIT0945 ;0946 Q22 BCS MOVDOGL MAN!} TO LEFT, SO MOVE LEFT0947 MOVDOGR LDA DOGPOSH,X GET DOG HORIZ POS0948 CLC SETUP ADD0949 ADC #8 PNT TO DOG RIGHT SIDE!}0950 TAY SAVE IN INDEX0951 JSR CHKBRKH CHECK FOR BRICKS THERE0952 BEQ Q23 NO CHAR SO CONTINUE0953 RTS CAN'T MOVE!} SO EXIT0954 Q23 INC DOGPOSH,X SET COL TO RIGHT0955 SAVDOGH LDA DOGPOSH,X GET NEW COL0956 STA HPOSP1,X SET HARDWARE HORIZ!} POS0957 RTS EXIT0958 ;0959 MOVDOGL LDY DOGPOSH,X GET DOG HORIZ POS0960 DEY SET COL TO LEFT0961 JSR CHKBRKH CHECK!} FOR BRICKS0962 BEQ Q24 NO BRICKS, SO CONTINUE0963 RTS ELSE, EXIT0964 Q24 DEC DOGPOSH,X SET COL TO LEFT0965 JMP SAV!}DOGH SET DOG HORIZ POS0966 ;0967 ; CHECK FOR BRICKS (HORIZ)0968 ; ------------------------0969 CHKBRKH STY TEMP+2 SAVE !}HORIZ POS TO CHECK0970 LDA DOGPOSV,X GET DOG VERT POS0971 TAX PUT IN INDEX REG0972 JSR CHKLRM CHK IF MOVE OK0973 PH!}P SAVE Z FLAG0974 LDX DOGNO GET CURRENT DOG #0975 PLP RESTORE Z FLAG0976 RTS ELSE, CAN'T MOVE0977 ;0978 ; MOVE!} BLOCK OF DATA0979 ; ------------------0980 ; ENTER WITH:0981 ; LOC 80,81 = DEST0982 ; LOC 82,83 = SRCE0983 ; LO!}C 84,85 = SIZE0984 ;0985 MOVE0986 LDY #00987 Q25 LDA (SRCADR),Y GET SRCE CHAR0988 STA (DESADR),Y MOVE TO DEST0989 JS!}R BUMPSRC PNT TO NEXT SRCE ADR0990 JSR BUMPDES PNT TO NEXT DEST ADR0991 JSR DECSIZE MORE TO MOVE ?0992 BNE Q25 YES, SO!} MOVE THEM0993 RTS NO, SO EXIT0994 ;0995 ; FILL BLOCK OF MEMORY0996 ; --------------------0997 ; ENTER WITH:0998 !}; LOC 80,81 = DEST0999 ; LOC 84,85 = SIZE1000 ; REG X = FILL CHAR1001 ;1002 FILL1003 TXA GET FILL CHAR1004 L!}DY #01005 STA (DESADR),Y PUT CHAR IN MEMORY1006 JSR BUMPDES PNT TO NEXT DEST ADR1007 JSR DECSIZE MORE TO FILL ?1008 B!}NE FILL YES, SO FILL THEM1009 RTS NO, SO EXIT1010 ;1011 BUMPSRC1012 CLC SETUP FOR ADD1013 LDA SRCADR GET LO SRCE !}ADR1014 ADC #1 ADJUST LO BYTE1015 STA SRCADR SAVE LO SRCE ADR1016 LDA SRCADR+1 GET HO SRCE ADR1017 ADC #0 ADD CARRY!} IF ANY1018 STA SRCADR+1 SAVE HO SRCE ADR1019 ;1020 RTS 1021 ;1022 BUMPDES1023 CLC SETUP FOR ADD1024 LDA DESADR !}GET LO DEST ADR1025 ADC #1 ADJUST LO BYTE1026 STA DESADR SAVE LO DEST ADR1027 LDA DESADR+1 GET HO DEST ADR1028 ADC #!}0 ADD CARRY IF ANY1029 STA DESADR+1 SAVE HO DEST ADR1030 RTS 1031 ;1032 DECSIZE1033 SEC PREPARE FOR SUBTRACT1034 !} LDA SIZE GET LO BYTE OF SIZE1035 SBC #1 ADJUST LO SIZE BYTE1036 STA SIZE SAVE LO SIZE1037 BNE Q26 LO BYTE NOT 0, SO !}CONTINUE1038 LDA SIZE+1 GET HO SIZE BYTE1039 BNE Q27 NOT 0, SO CONTINUE1040 RTS SIZE NOW 0, EXIT WITH Z FLAG1041 Q2!}6 LDA SIZE+1 GET HO BYTE OF SIZE1042 Q27 SBC #0 ADJUST HO SIZE BYTE1043 STA SIZE+1 SAVE HO SIZE BYTE1044 LDA #1 SIZE N!}OT 0, SET NZ FLAG1045 RTS EXIT1046 ;1047 ; MAIN DELAY1048 ; ----------1049 MDELAY LDX MDELHO GET DELAY HO VALUE105!}0 LDY MDELLO GET DELAY LO VALUE1051 Q28 DEY LO COUNT DONE ?1052 BNE Q28 NO1053 DEX LO COUNT DONE ?1054 BNE Q28 !}NO1055 RTS YES, SO EXIT1056 ;1057 ; CHECK IF MAN COLLIDED WITH DOG1058 ; ------------------------------1059 CHKMANO!}K1060 LDA P0PL GET MAN/DOG COLLISION INDICATOR1061 AND #$0E GET RID OF UNUSED BITS1062 RTS EXIT WITH Z FLAG SET IF NO!} HITS1063 ;1064 ; UPDATE THE SCORE1065 ; ----------------1066 ;1067 ; REG Y=VALUE TO ADD TO SCORE1068 ;1069 ADDSCOR!}E LDA SCORE+1 GET 10,000 UNIT VALUE1070 STA TEMP ; & SAVE1071 ADDSCOR1 LDX #5 SET TO PNT TO LO DIGIT1072 Q29 INC SCORE,X !}INC DIGIT1073 LDA SCORE,X GET DIGIT1074 CMP #$1A PAST '9' ?1075 BNE Q30 NO, SO CONTINUE ADDING1076 LDA #$10 YES, SO !}SET ATASCII 01077 STA SCORE,X SAVE DIGIT1078 DEX PNT TO NEXT HIGHER DIGIT1079 BPL Q29 IF WITHIN 6 DIGITS, CONTINUE1!}080 Q30 DEY MORE TO ADD ?1081 BNE ADDSCOR1 YES1082 ;1083 LDA TEMP GET ORIGINAL 10,000 UNIT VALUE1084 CMP SCORE+1 HAS!} ANOTHER 10,000 BEEN REACHED?1085 BEQ Q31 NO, SO EXIT1086 LDA LIVES YES, SO GET # OF LIVES1087 CMP #4 ALREADY HAVE MA!}XIMUM ?1088 BEQ Q31 YES1089 INC LIVES NO, SO ADD A LIFE1090 JSR SHOWLIVS SHOW EXTRA LIFE ON SCRN1091 Q31 RTS ELSE, !}EXIT1092 ;1093 ; SHOW LIVES REMAINING1094 ; --------------------1095 SHOWLIVS LDY #4 SET MAX # OF LIVES1096 LDA #010!}97 Q32 STA SLINE+8,Y BLANK SCRN LIVES1098 DEY MORE TO BLANK ?1099 BNE Q32 YES1100 ;1101 LDY LIVES GET # OF LIVES11!}02 BEQ Q33 NO LIVES LEFT, SO EXIT1103 LDA #LC+PF2CMASK GET LIFE CHAR1104 Q34 STA SLINE+8,Y PUT LIFE CHAR ON SCRN1105 D!}EY MORE TO SHOW ?1106 BNE Q34 YES1107 Q33 RTS 1108 ;1109 ; SET NEXT LEVEL1110 ; --------------1111 SETNLEV LDA LE!}VEL GET CURRENT LEVEL1112 AND #$0F MAKE IT BINARY1113 CMP #7 HIGHEST LEVEL ?1114 BEQ Q35 YES1115 ;1116 INC LEVEL N!}O, SO SET NEXT LEVEL1117 Q35 LDA COLOR1 GET ORIG PLAYFIELD 1 COLOR1118 PHA SAVE ON STACK1119 LDA #5 SET # OF TIMES TO!} LOOP1120 STA TEMP1121 Q36 LDA #GREY+12 SET COLOR & LUMINANCE1122 STA COLOR11123 ;1124 LDA #$801125 STA AUDF1 SET F!}REQ1126 LDA #$A61127 STA AUDC1 SET DISTORTION & VOLUME1128 LDY #0 SET OUTER LOOP VAL1129 LDX #0 SET INNER LOOP VAL!}1130 JSR WAIT1131 ;1132 LDA #REDORG+6 SET NEW COLOR & LUMINANCE1133 STA COLOR11134 ;1135 LDA #$C01136 STA AUDF1 SE!}T FREQ1137 LDA #$A61138 STA AUDC1 SET DISTORTION & VOLUME1139 LDY #0 SET OUTER LOOP VAL1140 LDX #0 SET INNER LOOP V!}AL1141 JSR WAIT1142 ;1143 DEC TEMP CHANGE COLORS AGAIN ?1144 BNE Q36 YES1145 ;1146 PLA GET ORIG PLAYFIELD 1 COLO!}R1147 STA COLOR1 RESTORE IT1148 LDA #01149 STA AUDC1 SET 0 VOLUME1150 RTS 1151 ;1152 WAIT TXA SAVE INNER LOOP VAL!}1153 Q37 TAX GET INNER LOOP VAL1154 Q38 DEX INNER LOOP DONE ?1155 BNE Q38 NO1156 DEY OUTER LOOP DONE ?1157 BNE !}Q37 NO1158 RTS 1159 ;1160 ; KILL MAN1161 ; --------1162 KILLMAN1163 LDA #9 SET INITIAL FREQUENCY1164 STA TEMP S!}AVE FREQ1165 STA AUDF1 SET FREQUENCY1166 LDA #$A0 SET INITIAL VOLUME1167 STA VOLUME SAVE FOR LATER1168 STA AUDC1 SET !}HARDWARE DIST & VOL1169 LDA #5 SET # OF TIMES TO DO COLOR CHANGE1170 Q39 PHA SAVE ON STACK1171 LDX #$FF SET INITIAL C!}OLOR1172 Q40 LDY #$FF SET DELAY VALUE1173 STX PCOLR0 SET MAN COLOR1174 Q41 DEY DELAY1175 BNE Q411176 LDA VOLUME GET!} VOLUME1177 SEC SETUP SUBTRACT1178 SBC #3 SET NEW VOLUME1179 STA VOLUME ; & SAVE1180 STA AUDC1 SET HARDWARE DIST &!} VOL1181 DEX MORE COLORS ?1182 BNE Q40 YES, SO SHOW THEM1183 INC TEMP SET NEW FREQ1184 LDA TEMP GET IT1185 STA A!}UDF1 SET HARDWARE FREQ1186 PLA GET COLOR CHANGE COUNT1187 SEC SETUP FOR SUBTRACT1188 SBC #1 SHOW COLOR CHANGE AGAI!}N ?1189 BNE Q39 YES1190 STA AUDC1 SET 0 VOLUME1191 RTS 1192 ;1193 ; SETUP INITIAL BRICKS1194 ; ------------------!}--1195 INITBRKS JSR CLSCRN CLEAR THE PLAY AREA1196 JSR DRAWWALL DRAW LEFT/RIGHT WALL1197 LDA #BC GET BRICK CHAR1198 S!}TA TEMP SAVE IT1199 STA DISP+91 PUT BRICK ON SCREEN1200 LDX #9 SET # OF BRICKS TO PUT ON SCRN1201 LDA #FIRSTBR&255 GET!} LO ADR OF 1ST BRICK1202 STA DESADR SAVE IT1203 LDA #FIRSTBR/256 GET HO ADR OF 1ST BRICK1204 STA DESADR+1 SAVE IT1205 !}Q42 LDA #M4LSIZE SET AMT TO GET TO NEXT LINE1206 JSR PUTSCRCH PUT BRICK ON SCRN1207 DEX MORE BRICKS ?1208 BNE Q42 YE!}S1209 RTS EXIT1210 ;1211 ; MOVE BRICK CHAR1212 ; ---------------1213 MOVBRICK LDA #01214 STA BSNDFLAG CLEAR BRICK!} SOUND FLAG1215 LDA STRIG0 IS TRIG DOWN ?1216 BNE Q43 NO, SO EXIT1217 ;1218 LDA #0 TRIG DOWN, SO1219 STA ATRACT DI!}SABLE ATTRACT MODE1220 ;1221 LDA MANPOSH GET MAN HORIZ POS1222 AND #3 IS MAN AT START OF CHAR BYTE ?1223 BNE Q43 NO,!} SO EXIT1224 LDA MANPOSH GET MAN HORIZ POS1225 SEC PREPARE FOR SUBT1226 SBC #8 PNT TO CHAR BEFORE MAN1227 TAY 122!}8 STA TEMP+3 SAVE IN CASE ITS NEEDED1229 LDX MANPOSV GET MAN VERT POS1230 JSR GETSCRN GET CHAR THERE1231 CMP #BC IS I!}T A BRICK ?1232 BEQ Q44 YES, SO MOVE BRICK1233 ;1234 LDA MANPOSV GET VERT POS1235 CLC SETUP ADD1236 ADC #8 PNT 1!} CHAR DOWN1237 TAX SET VERT POS1238 LDY TEMP+3 GET HORIZ POS1239 JSR GETSCRN GET SCRN CHAR1240 CMP #BC BRICK ?124!}1 BNE Q43 NO, SO EXIT1242 Q44 LDY #0 SET INDEX1243 LDA #0 SET BLANK CHAR1244 STA (DESADR),Y BLANK OLD BRICK CHAR124!}5 LDA #BC GET BRICK CHAR1246 LDY #1 SET INDEX FOR CHAR TO RIGHT1247 STA (DESADR),Y PUT BRICK AT NEW LOC1248 LDY #BRK!}POINT GET POINTS FOR BRICK MOVE1249 JSR ADDSCORE ADD TO SCORE1250 DEC BMOVES REDUCE # OF BRICKS TO MOVE1251 JSR BRKSND !}MAKE BRICK SOUND1252 Q43 RTS 1253 ;1254 ; MAKE BRICK SOUND1255 ; ----------------1256 BRKSND LDA #$70 SET INITIAL VOL,!}DISTORTION1257 STA VOLUME1258 LDA #$08 SET FREQUENCY1259 STA AUDF11260 Q45 LDA VOLUME1261 STA AUDC1 SET VOL & DISTOR!}TION1262 LDY #5 SET OUTER LOOP COUNT1263 Q46 LDX #$40 SET INNER LOOP COUNT1264 Q47 DEX INNER LOOP DONE ?1265 BNE Q47!} NO1266 DEY OUTER LOOP DONE ?1267 BNE Q46 NO1268 DEC VOLUME MORE SOUND ?1269 LDA VOLUME1270 CMP #$581271 BNE !}Q45 YES1272 LDA #11273 STA BSNDFLAG BRICK MADE SOUND,SO SET FLAG1274 RTS 1275 ;1276 ENDMSG .BYTE 39,33,45,37,0,47,54!},37,50,255 ; "GAME OVER"1277 ;1278 ; SCORE LINE1279 ; ----------1280 SLINE .BYTE 01281 LEVEL .BYTE 0,0,0,0,0,0,0,0,0,0!},0,01282 SCORE .BYTE 0,0,0,0,0,0,01283 ;1284 SLEND = *1285 ;1286 DIGITS .BYTE 16,17,18,19,20,21,22,23,24,251287 ;1288 !}LIFEPAT .BYTE $80,$90,$78,$3C,$1A,$38,$48,$481289 ;1290 BRICKPAT .BYTE $AA,$82,$82,$AA,$AA,$82,$82,$AA1291 ;1292 WALLPAT !}.BYTE $FF,$99,$99,$99,$99,$99,$99,$FF1293 ;1294 ; HORIZ MOVING MAN IMAGES1295 ; -----------------------1296 MANH1 .BYTE!} $10,$10,$38,$7C,$BA,$48,$84,$821297 MANH2 .BYTE $10,$10,$38,$38,$78,$AC,$48,$441298 MANH3 .BYTE $10,$10,$38,$38,$38,$28,$2!}8,$101299 MANH4 .BYTE $10,$10,$38,$7C,$BA,$38,$10,$281300 MANH5 .BYTE $10,$10,$38,$38,$7C,$38,$48,$481301 ;1302 ; VERTIC!}AL MOVING MAN IMAGES1303 ; --------------------------1304 .BYTE $80,$90,$78,$3C,$1A,$38,$48,$481305 .BYTE $00,$10,$FC,$!}3A,$18,$24,$24,$001306 .BYTE $00,$10,$FC,$3A,$18,$24,$24,$001307 .BYTE $02,$12,$3C,$78,$B0,$38,$24,$221308 ;1309 ; DOG!} IMAGE1310 ; ---------1311 DOGIMAGE .BYTE $66,$95,$1C,$22,$36,$3E,$14,$361312 ;1313 ; LEVEL CHARACTERISTICS TABLE1314 !}; ---------------------------1315 ; EACH ENTRY CONSISTS OF:1316 ;1317 ; E1,E2,E3,E41318 ;1319 ; E1 = NORMAL DOG MOVE!}S / MAN MOVE1320 ; E2 = MAN PULLING WALL DOG MOVES/MAN MOVE1321 ; E3 = OUTER LOOP DELAY VALUE (MAIN LOOP)1322 ; E4 = IN!}NER LOOP DELAY VALUE (MAIN LOOP)1323 ;1324 LEVTBL .BYTE 8,8,12,0 LEVEL 11325 .BYTE 3,3,12,$80 LEVEL 21326 .BYTE 3,2,11,!}0 LEVEL 31327 .BYTE 2,2,11,0 LEVEL 41328 .BYTE 2,1,11,80 LEVEL 51329 .BYTE 2,1,11,$80 LEVEL 61330 .BYTE 2,1,10,0 LEVE!}L 71331 ;1332 BMOVES *= *+1 # OF BRICKS TO BE MOVED1333 BSNDFLAG *= *+1 0 IF NO BRICK SOUND MADE1334 ; 1 IF BRICK SOU!}ND MADE1335 LIVES *= *+1 # OF LIVES REMAINING1336 MDELHO *= *+1 MAIN DELAY HO VALUE1337 MDELLO *= *+1 MAIN DELAY LO VALUE!}1338 TEMP *= *+4 TEMPORARY WORK STORAGE1339 VOLUME *= *+1 VOLUME FOR SOUNDS1340 ;1341 ; MAN VARIABLES1342 ; ----------!}---1343 MANPICNO *= *+1 MAN'S CURRENT IMAGE #1344 MANPOSH *= *+1 MAN'S CURRENT HORIZ POS1345 MANPOSV *= *+1 MAN'S CURRENT !}VERT POS1346 ;1347 ; DOG VARIABLES1348 ; -------------1349 DOGPOSH = *1350 DOG1POSH *= *+1 DOG 1 HORIZ POS1351 DOG2PO!}SH *= *+1 DOG 2 HORIZ POS1352 DOG3POSH *= *+1 DOG 3 HORIZ POS1353 ;1354 DOGPOSV = *1355 DOG1POSV *= *+1 DOG 1 VERT POS13!}56 DOG2POSV *= *+1 DOG 2 VERT POS1357 DOG3POSV *= *+1 DOG 3 VERT POS1358 ;1359 DOGFREQ1 *= *+1 # OF TIMES MAN MOVES BEFORE!} DOG DOES1360 ; WHEN MAN NOT PULLING WALL1361 DOGFREQ2 *= *+1 # OF TIMES MAN MOVES BEFORE DOG1362 ; WHEN MAN PULLI!}NG WALL1363 DOGMOVCT *= *+1 INDICATES WHEN DOG CAN MOVE1364 DOGNO *= *+1 CURRENT DOG #1365 ;DOG1362 ; WHEN MAN PULLI `10 *= $0600 ;START ADDRESS20 LDA #$4F ;LOAD ACCUMULATOR30 BRK ;AND STOP40 .END2 ; WHEN MAN PULLI$g10 *= $0600 ;START ADDRESS20 LDA #$0F ;PUT $0F IN A30 TAX ;PUT IN X, TOO40 LDA #$6A ;PUT $6A IN A)}50 TAY ;NOW PUT IN Y, TOO60 BRK ;AND STOP!70 .END ;PUT IN X, TOO40 LDA #$6A ;PUT $6A IN A(J10 LDA #23 ;PUT 23 IN A20 CLC ;CLEAR CARRY FOR ADD30 ADC #14 ;AND ADD 14 TO IT!40 STA ANSWER ;SAV-}E RESULT#23 ;PUT 23 IN A20 CLC ;CLEAR CARRY FOR ADD30 ADC #14 ;AND ADD 14 TO IT!40 STA ANSWER ;SAV, 10 LDA #23 ;PUT 23 IN A20 SEC ;SET CARRY FOR SUB.30 SBC #14 ;AND SUB 14 FROM IT!40 STA ANSWER ;SA1}VE RESULT23 ;PUT 23 IN A20 SEC ;SET CARRY FOR SUB.30 SBC #14 ;AND SUB 14 FROM IT!40 STA ANSWER ;SA0 10 *= $060020 CLD ;NO DECIMAL MODE!30 LDA #8 ;PUT 8 IN A40 SEC ;SET CARRY,50 SBC #7 5};SUBTRACT 7 FROM 860 STA HOLD ;AND SAVE RESULT70 LDA #4 ;NOW PUT 4 IN A80 CLC ;CLEAR CARRY,90 ADC 5} #5 ;ADD 4 & 50100 CLC ;CLEAR CARRY AGAIN0110 ADC #34 ;ADD 34 TO LAST #0120 SEC ;SET CARRY,015}30 SBC HOLD ;SUBTRACT EARLIER #0140 STA ANSWER ;AND SAVE ANSWER!0150 BRK ;ALL DONE!0155 ;0160 HOLD *=*+15} ;TEMP. HOLD AREA0170 ANSWER *=*+1 ;FINAL RESULT0180 .ENDVE ANSWER!0150 BRK ;ALL DONE!0155 ;0160 HOLD *=*+14=